// let const var
// let 声明的变量只在 let 命令所在的代码块{}内有效。const 声明一个只读的常量，一旦声明，常量的值就不能改变。
// 块作用域要比函数作用域小一些，但是如果两者(let var)既没在函数中，也没在块作用域中定义，那么两者都属于全局作用域。
let a = 'name'; 
const pi = 3.1415926;
var a = (1+2)*5;
var a = document.getElementById('demo');

// 数据类型：字符串类型、数值类型、布尔类型(true and false)、对象类型或者null、未定义类型(undefined)
// typeof
var a = NaN;// (not a number的简写)  isNaN()函数
// isFinite('a') 确定最大最小值之间的数。

// 数值转换，有三个函数可以把非数值转换为数值！如果是Boolean 值，true 和 false 将分别被转换为1和0
// Number()
// parseInt()
// parseFloat()

// 转义字符
// \n  换行
// \\  斜杠...

// 字符串转换
var a1 = 3;
a.toString(); // String(a);

// 操作符 位操作符：按位非(NOT) 按位与(AND) 或(OR) 按位异或（XOR） 不相等!=
// 左移操作符由两个小于号（<<）表示 
var myObject = p1 || p2;// 逻辑或
var myObject2 = p1 && p2;// 逻辑与
// 乘法*、除法/和求模%




// 数组 Array.from()

// 迭代器方法 三个用于检索数组内容的方法：keys()、values()和entries()
const lazy = ['one', 'two', 'three', 'four'];
Array.from(lazy.keys); //[0, 1, 2, 3]
Array.from(lazy.values); //["one", "two", "three", "four"]
Array.from(lazy.entries()); //[[0, "one"][1, "two"][2, "three"][3, "four"]]

const zeroes = [0, 0, 0, 0, 0];

// 用5填充整个数组
zeroes.fill(5); //[5, 5, 5, 5, 5]
zeroes.fill(0); // 重置

// 用6填充索引大于等于3的元素
zeroes.fill(6, 3); //[0, 0, 0, 6, 6]
zeroes.fill(0); // 重置

// 用7填充大于等于1且小于3的元素
zeroes.fill(7, 1, 3); //[0, 7, 7, 0, 0]
zeroes.fill(0); // 重置

// 用8填充索引大于等于1且小于4的元素
// (-4 + zeroes.length = 1)
// (-1 + zeroes.length = 1)
zeroes.fill(8, -4, -1); //[0, 8, 8, 8, 0]
zeroes.fill(0); // 重置

// fill() 静默忽略超出数组边界、零长度及方向相反的索引范围

// 索引过低，忽略
zeroes.fill(1, -10, -6); //[0, 0, 0, 0, 0]

// 索引过高忽略
zeroes.fill(1, 10, 15); //[0, 0, 0, 0, 0]

// 索引反向，忽略
zeroes.fill(2, 4, 2); //[0, 0, 0, 0, 0]

// 索引部分可用，填充可用部分
zeroes.fill(4, 3, 10); //[0, 0, 0, 4, 4]


// --------------------------条件语句--------------------------
if(i<1 && i != null || i>0){ // &&为全真  ||为有一个真就可以了，或者的意思
    return true;
};

        if (1 > 2) {
            document.write('a');
        }
        //上面与下面效果完全一样
        1 > 2 && document.write('a');
// while条件语句
var i = 0;
while(3>0){ //条件相当于死循环(never-ending loop)，或者直接写成while(3){}
    document.write('<p></p>');
    i++;
};
//do while条件语句
var i = 1;
do{
    document.write('<p></p>');
    i++;
}while(3);

// switch语句
var date = window.prompt('input');
switch(date){
    case 'monday':
        console.log('working');
        break;
    case 'tuesday':
        console.log('working');
        break;
    case 'wednesday':
        console.log('relaxing');
        break;
}
// continue 终止本次循环，后面的都不执行了，直接进行下一次的循环
for(var i =1;i<100;i++){
    if(i % 7 == 0 || i % 10 == 0){
        continue;
    }
    console.log(i);
}


        for(var i = 1; i<3;i++){
            document.write('<a></a>');
        };
        // eg-for
        var i = 0;
        for(; i < 10; ) {
        document.write('a');
        i++;
        }
// 标签语句
lazy:
for(var i = 0; i < 10; i++){
    if(i % 2) continue lazy;
    console.log(i) // 0 2 4 6 8
}

// --------------------------函数--------------------------
// eg-简单函数
function plus(num1,num2){
    var total = num1 * num2;
    return total;
};
plus(3,2);// > 6

// 全局作用域 函数作用域 块作用域 全局变量和局部变量



// 面向对象编程， 对象作为实例，举个例子person
// person的属性可以有 person.age person.name
// person.eat()  person.work()   person.run()这些都是person的方法

//使用关键词 new
var pertty = new person;


// 获取ID、TagName、ClassName的方法
document.getElementById('demo');
document.getElementsByClassName('demo');

var tagname = document.getElementsByTagName('demo'); //返回数组 important!
alert(tagname.length);

// 元素属性
element.innerHTML; //专利属性
element.attribute;// 属性值
element.setAttribute;// 属性值
element.style.property;// 样式，注意这里的style也是对象

// DOM(document object model) 方法
document.createElement('table');// 注意：直接创建不会显示，需要再创建节点才能显示这个标签。
document.removeElement('table');
document.createTextNode();
document.appendChild('p'); 
document.replaceChild('element');
document.write('hello world!');
document.writeln('hello world!');

// insertBefore()
// insertAfter()

// eg-getElementsByName 注意放到<script></script>--><body></body>
var x = document.getElementsByName('p');
document.getElementById('demo').innerHTML = '我' + x[0].innerHTML;

// 内建对象：提供一些列预先定义好的对象，比如：Array Math Date
// 宿主对象：由web浏览器提供预先定义的对象。 比如：form image getElementById ，宿主对象典型的window对象
// 节点中关系：父parent 子child 兄sibling


let massage;
let mm = 'xiao_ming';
var name;
var people = 'ww';
alert(name);

//定义常量，比如PI
const PI = 3.1415;
